package com.example.midprojcampusspringboot.controller;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.example.midprojcampusspringboot.common.ResultUtil;
import com.example.midprojcampusspringboot.common.TableData;
import com.example.midprojcampusspringboot.domain.entity.TManagerActivity;
import com.example.midprojcampusspringboot.domain.params.ActivityAddParams;
import com.example.midprojcampusspringboot.mapping.ActivityMapping;
import com.example.midprojcampusspringboot.service.ActivityService;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * Activity活动管理
 *
 * @Author Fengwei
 * @Description
 * a)活动创建
 * b)活动修改编辑
 * c)活动发布：将活动的编辑状态修改为已发布
 * d)活动查询：根据活动状态，活动名称模糊查询来实现活动查询，查询结果列表按照创建时间或发布时间的降序排列。
 *
 **/

@RestController
@RequestMapping("/activity")
public class ActivityController {

    @Autowired
    private ActivityService activityService;

    /**
     * 1.活动创建
     *
     **/
    @PostMapping("/create")
    public ResultUtil createActivity(@RequestBody @Validated ActivityAddParams activityAddParams) {
        TManagerActivity tManagerActivity = new TManagerActivity();
        // 使用方法，将param中的数据赋值给对象
        BeanUtils.copyProperties(activityAddParams, tManagerActivity);
        return activityService.save(tManagerActivity) ? ResultUtil.success("活动创建成功") : ResultUtil.error("活动创建失败");
    }

    /**
     * 2.活动修改
     *
     **/
    @PutMapping("/update")
    public ResultUtil updateActivity(@RequestBody @Validated ActivityAddParams activityAddParams) {
        TManagerActivity tManagerActivity = new TManagerActivity();
        BeanUtils.copyProperties(activityAddParams, tManagerActivity);
        return activityService.updateById(tManagerActivity) ? ResultUtil.success("活动修改成功") : ResultUtil.error("活动修改失败");
    }

    /**
     * 3.活动发布：将活动的编辑状态修改为已发布 -- 将0修改为1
     *
     **/
    @PutMapping("/publish")
    public ResultUtil publishActivity(Long id) {
        // 先查询当前的活动的状态
        TManagerActivity activity = activityService.getById(id);
        if (activity != null && activity.getStatus() == 0) {
            // 如果当前的活动状态为0（创建），则可以修改为已发布状态（1）
            activity.setStatus(1);
            // 然后修改对应的数据
            return activityService.updateById(activity) ? ResultUtil.success("发布成功") : ResultUtil.error("发布失败");
        }
        return ResultUtil.error("发布失败");
    }

    /**
     * 4.活动查询：
     * 根据活动状态，活动名称模糊查询来实现活动查询
     * 查询结果列表按照创建时间降序排列。
     *
     **/
    @GetMapping("/list")
    public TableData listActivity(@RequestParam(value = "name", required = false) String name){
        QueryWrapper<TManagerActivity> queryWrapper = new QueryWrapper<>();
        // 过滤掉未发布的课程
        queryWrapper.eq("status", 1);
        // 如果name参数不为空，则进行模糊查询
        if (name != null && !name.trim().isEmpty()) {
            queryWrapper.like("name", name);
        }
        // 按创建时间降序排序
        queryWrapper.orderByDesc("created_time");
        // 获取数据对象
        List<TManagerActivity> list = activityService.list(queryWrapper);
        return TableData.success(list, list.size());
    }

}
